# -*- coding: utf-8 -*-
__author__ = 'lztkdr'
__date__ = '2020/4/2 16:11'

"""

现在我们有一组关于全球星巴克店铺的统计数据，如果我想知道美国的星巴克数量和中国的哪个多，或者我想知道中国每个省份星巴克的数量的情况，那么应该怎么办？

思路：遍历一遍，每次加1 ？？？

数据来源：https://www.kaggle.com/starbucks/store-locations/data


"""

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Pycharm输出窗口有省略号，数据显示不全解决方法
pd.set_option('display.max_rows', 10)
pd.set_option('display.max_columns', 200)
pd.set_option('display.width', 1000)

# 如果要显示中文标题和坐标表示，需要添加以下两行代码
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

print(
	"===========================================================================================================================")
file_path = './starbucks_store_worldwide.csv'
df = pd.read_csv(file_path)
print(df.head(1))
print("========================================")
print(df.count())
print("========================================")
grouped = df.groupby(by="Country")
# print(grouped)
print("========================================")
# DataFrameGroupBy
# 可以进行遍历
# for i,j in grouped:
#     print(i)
#     print("============")
#     print(type(j))
#     print("============")
# 调用聚合方法
# 以门店 数量计数
# Brand 包含 Starbucks （专卖咖啡）和 Teavana (专卖茶叶)
country_count = grouped["Brand"].count()
print(country_count)
print("========================================")
# 美国门店数量
print("美国门店数量:", country_count["US"])
# 中国门店数量
print("中国门店数量:", country_count["CN"])
print("========================================")
# 统计中国每个省店铺的数量
china_data = df[df["Country"] == "CN"]
print("按省分组(包含其他列)：\n", china_data.groupby(by="State/Province").count())
print("========================================")
# 与 china_data.groupby(by="State/Province")["Brand"].count() 效果相同
grouped = china_data.groupby(by="State/Province").count()["Brand"]
print("按省分组(只有门店列)：\n", grouped)
print("========================================")
print("按照多个列分组，就有多个索引，别名 复合索引：")
grouped = df.groupby(by=["Country", "State/Province"]).count()["Brand"]
print("多条件分组（写法1）：\n", grouped)
print(type(grouped))
# Series 类型，grouped 前面2列是 索引，后面是 才是值
print("grouped.index.name:", grouped.index.name)
print("grouped.index.names:", grouped.index.names)
print("grouped.shape:", grouped.shape)
print("grouped.ndim:", grouped.ndim)
print("====================")
print("按照多个列分组，就有多个索引，别名 复合索引：")
grouped = df["Brand"].groupby(by=[df["Country"], df["State/Province"]]).count()
print("多条件分组（写法2）：\n", grouped)
print(type(grouped))
# Series 类型，grouped 前面2列是 索引，后面是 才是值
print("grouped.index.name:", grouped.index.name)
print("grouped.index.names:", grouped.index.names)
print("grouped.shape:", grouped.shape)
print("grouped.ndim:", grouped.ndim)
print(
	"===========================================================================================================================")
# 上面分组后返回的都是 Series 类型，下面使用 中括号[] ，数据按照多个条件进行分组,返回DataFrame
# grouped1、grouped2、grouped3 的写法 效果相同
grouped1 = df[["Brand"]].groupby(by=[df["Country"], df["State/Province"]]).count()
grouped2 = df.groupby(by=[df["Country"], df["State/Province"]])[["Brand"]].count()
grouped3 = df.groupby(by=[df["Country"], df["State/Province"]]).count()[["Brand"]]

print(type(grouped1))
print("grouped1.index.name:", grouped1.index.name)
print("grouped1.index.names:", grouped1.index.names)
print("grouped1.shape:", grouped1.shape)
print("grouped1.ndim:", grouped1.ndim)
print("====================")
print(type(grouped2))
print("grouped2.index.name:", grouped2.index.name)
print("grouped2.index.names:", grouped2.index.names)
print("grouped2.shape:", grouped2.shape)
print("grouped2.ndim:", grouped2.ndim)
print("====================")
print(type(grouped3))
print("grouped3.index.name:", grouped3.index.name)
print("grouped3.index.names:", grouped3.index.names)
print("grouped3.shape:", grouped3.shape)
print("grouped3.ndim:", grouped3.ndim)

